2025-07-19 03:49:00
I always think of the saying "Jack of all trades, master of none." Its earliest appearance in print dates from 1785. (Akin to popular adages, the phrase has been mangled into a continuation of ". . .but often times better than a master of one," for a more nuanced sentiment, but that's beside the point. I just thought it was an interesting variant.)
I was always propelled with a strange (delusional? notional?) zealousness to be someone who is exceptionally good at everything I do. I intentionally say exceptionally good to not be misconstrued with perfect. Perfectionism is an unattainable ideal and will never fall under my aspirations. I wanted to work hard, to build myself piece by piece, into a master, an expert into the things I invest my time to. Is it a stupid thing to admit? Maybe. But I am not here to half-ass things.
What got me contemplating that saying is this weird - and, frankly, terrifying - thought I had: If I invest my time into various aspects, can I become an expert in all of them? If I am trying to be everything, will I end up being nothing?
There’s a tension I incessantly carry: the pull between curiosity and mastery. I want to write beautifully till I run my own magazine. I want to draw till my pieces are installed in galleries. I want to understand the intricacies of chemical engineering till I become distinguishable in the industry. I don’t want to just dabble in these disciplines. No, I want to know them in depth, in profundity.
But what happens if I keep stretching myself across too many directions? Will I dilute my potential? Is there a point where breadth undermines depth?
This is where that old phrase imposes a nonsensical quandary: Jack of all trades, master of none. An unspoken accusation: I am spread too thin. I will never be exceptional because I am just too unfocused. (I find this quite funny, because the original phrase was never intended as derogatory.)
From what I understand, the path to mastery is ostensibly perceived as being so utterly, exhaustively invested in one specific discipline to the point of expertise and rarity. For so long, I targeted that precise definition in my life.
I am trying to rework this perception, though, even if it's not applicable to everyone, with this: Mastery is not claiming expertise, but in staying committed. In showing up again and again to each craft, even if progress feels slow with each, even if I am unsure where it will all lead.
(I wasn't sure how to end this, but I had a thought: I wonder if, perhaps, instead of mastering each thing in isolation - engineering, writing, drawing - I can weave a larger net, one that forms nuance and connections among all of which, till it becomes something uniquely my own? Could that be its own kind of mastery? Well, only time will tell.)
2025-07-18 00:29:00
Today I was called a Twat and I accepted it.
I was explaining to someone that I try not to work Friday or Monday these days. I was informed that the cool people call that TWAT working (Tuesday, Wednesday, and Thursday). I'll take that.
I think I need that on a T-shirt.
If the label fits.... 😊
Leave a Comment; Reply via the Fediverse; or send me message if you have replied with your own blog post and I will mention it here.
2025-07-17 19:58:00
Hatching...
Cursor, my beloved, started rate limiting shenanigans a few days back. For a good 2 weeks after June 16, 2025, we had almost infinite API request access. I had a lot of code-related work around this time as I was working on Gumroad bounties plus my AI engineering/LLM eval-related consulting work. Apart from just codegen, I also use these tools to onboard/understand codebases faster and just ask a lot of questions in general.
cursor rate limiting shenanigans starting to kick in pic.twitter.com/abc123
— sankalp (@dejavucoder) December 20, 2024
But one fine day, they pulled the plug and started rate-limiting. I admit I milked them too much, so I didn't feel bad about this. It's worth asking whether I was doing shenanigans or it was Cursor.
cursor shenanigans or my shenanigans? pic.twitter.com/def456
— sankalp (@dejavucoder) December 31, 2024
But post this change, people have been getting rate-limited much faster, and you can only get unlimited usage using the auto-model feature. Speaking for myself, I don't really trust models other than Sonnet 4 and o3. Both are beasts at agentic search and code generation. Using these with API usage pricing can quickly lead to "oh husbant... now we are homeless."
I do trust Gemini Pro 2.5 and GPT-4.1 a bit, but I use the former 2 the most. Oh, I forgot to mention Opus 4 can really help solve some bugs on which Sonnet 4 struggles for hours so when I used to get really stuck in Cursor, I would switch on API usage pricing for a short while and solve my issue (or just dump code on the Claude chat platform)
one big reason to use cursor apart from the great developer experience was to spend 20 dollars and get 100 dollar worth of API credits value thanks to VC daddies but i am not sure if that would still retain going forward https://t.co/PYderkMs1g
— sankalp (@dejavucoder) July 5, 2025
Lately, the requests also started getting a bit slower on Cursor - Sonnet specifically. Maybe this was an Anthropic issue (someone give this company some more GPUs and senior distributed systems engineers to keep their API up).
Apart from the above, I was also influenced by many of the tpot peeps like @tokenbender, @thepushkarp, @xeophon_, @menhguin, etc. Tokenbender's blog showed that you can do a lot of power user and multi-agent stuff on the system so that got me hooked too.
This is, kids, How I Met Claude Code. I already had a $20 subscription. I started using Claude Code via the sub; they only provide Sonnet 4, and it was sufficient for me 90% of the time. I installed CC inside Cursor.
Cursor's diff reviewing workflow was too convenient, and I couldn't leave this behind. I like to review most of my diffs, unlike certain people who just keep pressing "Accept All"... (Anya Heh Face .jpeg)
You can review all the diffs, resolve merge conflicts, and all the nice editor things.
Sometimes you just want that pinch of o3 usage or Grok 4 or other new exciting models. Other times you just want to format some stuff because copying with correct formatting still sucks in CC. I had also gotten RLHF'ed by the Cursor notification sound at this point. Sorry, this is turning out to be a Cursor nostalgia post, but I promise the next sections are all about CC.
Anyways since Cursor had been limiting so much and I had a lot of coding work (work work and gumroad bounties haha), I decided to try out the 200 USD Claude Max subscription. It's basically unlimited Sonnet 4 and Opus 4 (and it better be) and started experimenting. I think 100 USD plan should be more than enough for most too.
Where was the model tested? Before I go into my workflow, wanted to provide some context around what programming languages and what type of codebase I was working in. Most of the time of past 2 weeks, I used Claude Code on medium sized Python codebase and a Ruby + Typescript large OpenSource codebase. 50M+ tokens. They had specs and e2e tests so yeah I did have feedback when I was done with a feature - I could run specs and Claude Code could form a loop. I would usually advise it to fix specs one by one. --fail-fast to find errors fast. Prior to Claude Code, I had been using Cursor for an year or so.
Discombubulating…
Coming to the workflow, initially I just typed stuff to make changes. I stared at the screen, seeing it slowly find files and perform edits. It took me some time to trust it - 2-3 days despite the model being Sonnet 4. (I was hesitant to switch on Auto Edit mode lol)
Once I gained confidence, I started getting more into exploring commands. My effort was to get really good at the basic commands - you need to experiment/explore to even find these. It’s very easy to miss these when you just read stuff.
The next few sections are exactly what I mention above - a beginner's guide, apart from me telling my experience so far. My current Claude Code dance is to start fresh, dump my entire problem like I'm talking to a therapist, then switch to Opus if things get spicy (/model Opus → Shift+Tab for planning mode).
These days I tell it to scribble notes in claude.md or branch-analysis.md inside the .claude folder - took me 4 days to discover this trick, naturally.
The copy-pasting nightmare can be solved to some extent by just making Claude write everything to files first, then copy from there.
Tip: Use Shift+Tab extensively; cycle between Plan mode and the auto-edit mode. Get a plan from Opus and do 80-90% of the task with Sonnet 4. It would be faster. The below screenshot is from one of my chats with Pushkar.
Flibbertigibbeting…
If you use Claude Code, it will show X% until compaction happens. The moment I see that, I just start a new chat after - telling Claude to note down the important points in a file and then I will just start a new chat. I just intuitively feel it’s better to start a new chat.
Sometimes, when I genuinely like a note and I absolutely want some of the context to stay, I do compaction. Otherwise, I don't. Plus it takes quite a few minutes to complete.
Many agent frameworks have utilised the “scratchpad” idea. You can tell claude to keep documenting it’s changes in scratchpad. It will document all files and all edits/removals/additions and maybe user notes (you can tell it to). Helps a lot when you come back to branch and start a new session. By the way, you can resume an old session by /resume
Resume a conversation option. I found this after 1 week of usage 😭. Below screenshot from token’s blog.
Transmuting….
I posted this the day I started using claude code haha and the algo kinda picked it up. There are bunch of good replies btw.
why sonnet feels better in claude code than in cursor? pic.twitter.com/ghi789
— sankalp (@dejavucoder) January 6, 2025
The gist was Claude Code is likely post-trained with the same tools that it currently uses. It’s just more comfortable in the current harness. Now that I have experienced using it too, I can say the the “tool call” selection that they have implemented contributes to this.
I think it manages context better too - Cursor might be compressing or making some optimisations to the context (speculation) while Claude can just read lines in a vanilla way. I also feel CC might be using tokens more efficiently.
By the way these days, I have started using CC more in just a standalone terminal instead of Cursor because latter is buggy.
Smooshing…
When you see this Cute Todo list - it’s Claude subagents at play. How these are spawned, I don’t know the details but this is partly responsible for better context management.
Reticulating…
Cursor allowed models to do normal searches and semantic search. If I am not wrong, agentic search is just letting the model explore the codebase by itself and giving it freedom to use tools like grep, ripgrep. Cursor allows for a semantic search tool call. I think overall, Cursor search is much faster… Maybe I will try MorphLLM’s retrieval tool to try semantic search with CC.
Coming to CC, the search to be pretty slow (can be mitigated by above context mgmt techniques above). But the thing is you can use subagents. You can do a lot of searches in a big codebase, then you can tell Claude to use sub-agents in parallel. It has this task tool which runs in a multi-threaded way. It will deploy several agents - these agents are like Haiku-based or Sonnet which I don't know but if they just have to do grep tool calls, then I think even Haiku is fine. Below is a screenshot from Anthropic’s official blogpost claude-code-best-practices. It’s done by the “Task tool”.
Key tips from above SS are to use subagents and use /think /think hard /ultrathink
I wondered for a while how can I just use bash mode without switching to a different terminal.
Then I had a look at shortcuts Shift + ?
. You can just do !
. I got to know about this after like a week of usage lmao.
It can run one off commands, but I think it cannot run a Python interactive shell like you can do in a normal terminal. Again, I love the colors.
By the way it's possible to run claude in headless mode using claude -p "search the internet and tell me about anthropic"
since it's a proper CLI tool.
Moving ahead... this is gonna sound dumb, but I didn't know you can @ files in Claude Code for like 3-4 days of usage. @Josh9817 told me eventually. Had I checked shortcuts before, I would have realized this.
Another feature is memorize. I haven't used this a lot so far, but it's like adding custom instructions to system prompt. It will use these across sessions.
How Claude looks up memories
Claude Code reads memories recursively: starting in the cwd, Claude Code recurses up to (but not including) the root directory / and reads any CLAUDE.md or CLAUDE.local.md files it finds. This is especially convenient when working in large repositories where you run Claude Code in foo/bar/, and have memories in both foo/CLAUDE.md and foo/bar/CLAUDE.md.
Claude will also discover CLAUDE.md nested in subtrees under your current working directory. Instead of loading them at launch, they are only included when Claude reads files in those subtrees.
Love the colors!
Musing…
Sonnet does the job 90% of the time, infact it scores a few points above Opus 4 in SWE-bench. It's very good at Python and like any type of front-end slop. Sonnet >> Opus when things get long context plus it’s more agentic and faster.
I've noticed that Opus tends to get confused after a few turns of instructions. How I solve this → In these scenarios, I usually tell it to dump stuff in some file inside the. Claude folder and then I start a new conversation. If it is some difficult bug, I will start with Opus. Otherwise, I just start with Sonnet. If you have provided all the relevant context to Sonnet, then most of the time Sonnet does the job.
Opus does well when Sonnet gets stuck - start a new window and spam Opus.
/pr-comments
and /review
are available by default but they reflect what a custom command can be like. You need to have github CLI installed for these.
Let’s say I made some changes on a branch, and now I want to restart the conversation. In this case, there are two options:
I can mention in some file the people whose comments are relevant, and we skip other bots and stuff. Another thing you can do is just tell it "we want to start a new session" and then we will see the diff via the review PR. This would take more steps but it would have more context. A simpler way would be to just tell it "hey please check the diff from main" (this is like a substitute for the cursor diff from main branch feature which also I loved as an experience)
I loved this video:
I consider Cursor a power use tool too and it's UI/UX is super polished. However Claude Code is one step further in terms of the power usage (but obviously behind UI/UX and a steeper learning curve)
Overall I feel due to the CLI based nature of Claude Code, it urges the user to do more exploration. I think because of lack of visual UI cues, it encourages exploration. A lot of stuff is hidden and you need to find it. It rewards you for curiosity. It might feel better for this reason for the nerds and power users.
If you made it this far, thanks for reading! Hope you learnt something new.
great blog post about claude code experience https://t.co/jkl012
— tbpn (@tbpn) January 13, 2025
Edit: We hit HackerRank #5
This is the 2nd time I hit Hackernews front page. You may also like my 1st Hackernews FP blogpost Shape Rotation 101: An Intro to Einsum and Jax Transformers
2025-07-17 11:47:00
I recently started a new job as a Senior Software Engineer at Headway. Now that I'm a few weeks into my new gig I thought it might be fun to share some numbers from my job hunt.
I started job hunting full time in January 2025 and signed an offer in June 2025. A bit less than 6 months from start to finish. Although, I wasn't actively applying for jobs during all of that time so it's probably closer to 3 or 4 months of intensive job search stuff.
Here's the numbers at a high level:
And here's a nice funnel graphic:
The above graphic is broken down by application type. My number one take away from this job hunt was referrals are very powerful and by far the most effective way to get to the interview rounds. I did apply directly to some roles but I quickly realized that that method was a waste of time and stopped. I cringe when I see people post on LinkedIn that they've submitted 800 applications and not heard back. Please don't do that. Unfortunately, the spray and pray method will not work in this job market.
A number of times I thought that I had tapped out my potential referrals, but ended up combing back through my network a 2nd, 3rd, or 4th time. I always ended up finding new referrals.
Feel free to contact me with any questions and I'll be happy to expand on any of the above numbers and offer some (maybe) helpful advice.
2025-07-17 02:08:00
So I'm keeping this as a draft view.
If you already know the story, that's great, but there might be some questions or some things that you really want to ask about that I haven't talked about in person. So I'm keeping this as a draft state, so that I can write it better later.
Before you read this post, if you got this link from a friend or someone shared this with you, give them a high five from my side :D
If you don't know me (yet), or we haven't met, don't worry — we still have time. Just look me up and let's connect.
I did a lot of interviews, but with my skills and ability to learn, I always believed I could do better, and kept applying and doing interviews, and one day I saw a random post in a random portal, and I applied.
After that, there were 5 rounds in total. So I did 3 rounds while I was at home, 2 rounds while I was in Bangalore, which took about a month (38 days, but who is counting xD) to complete, and I joined Atlan in 2024 as a frontend intern.
And, yes, it was off-campus.
If you are interested in the metrics:
0 official internships (I haven't done any official internships before)
0 certifications (Not interested in taking certifications)
8.36 CGPA (which I got somehow)
0 On-campus placements (I tried one or two, to get to know about how the process is for my final year project, so that doesn't count)
200+ leetcode problems solved (There are around 2000+ problems in the platform, which I don't want to look at again tbh)
14 Malayalam Fingerstyle Guitar Covers (I know, it's an unrelated metric, but if you are interested, check it out @alwinjohn at YT or @iamalwinjohn at IG)
The reality of it was that it took me 6 months after graduation to find and figure out what i want todo...
I will include the rest later, in some time after getting some feedback If you want to know how I prepared for it? What exactly did I do or didn't do, or what strategies that I come with, just let me know :D
I will include it in the long version
2025-07-16 23:10:00
Today's the five year anniversary of Necrobarista's release. For those unfamiliar, a quick primer: Necrobarista is a 3D visual novel set in a cafe that sits on the boundary between the real world and the afterlife, acting as a place for the recently departed to stop for one last cup of coffee. It was developed by a team of less than a dozen people mostly based in Melbourne, Australia, though there were a small number of personnel, such as myself, who worked remotely. It shipped on three platforms and in fourteen languages, was generally well received, and won a couple of awards. It was first released on July 17, 2020 (Apple Arcade), followed by a PC launch on July 22 and an expanded "director's cut", dubbed Final Pour, released for existing platforms and Nintendo Switch in August 2021. I was the lead writer.
So, where to begin?
I think I need to start here, not with a disclaimer, but to set the tone: Necrobarista's development was extremely difficult. As a consequence of many confounding factors, including a large number of poor choices by management spanning across the game's development, we were underpaid, underresourced, and a year before release, the game was content complete but we were running on fumes. The studio environment always had toxic elements, and they only intensified once the Covid lockdowns began. People I care about were hurt by this. I was hurt by this! I walked away hurt, and I am still hurt.
I suppose it's appropriate, in the end, that Necrobarista itself is a story about complex love, with confounding factors.
It's funny to think about where I was when I started work on Necrobarista, both as a person and as a professional. I was asked to work on it after giving some respectful but pointed feedback on its PAX Aus demo (2017). The personal context around this is that I was about to finish working at a studio where I had been required to be subordinate to a deeply abusive creative who was completely new to working on games, and who was intentionally ignorant of the realities of production that constrain a game's writing. Just a complete dilettante in every way. Though the studio's management readily admitted that they had made serious errors in allowing him to repeatedly attempt to gaslight myself and other professionals at the studio about the process of developing a game with no negative repercussions, this experience was nonetheless extremely difficult and left me with a bunch of mental trauma and related health issues, including memory and heart problems. Game development, everyone!
So, I was very burnt out from my previous experiences (both recent and not-so-recent) but very sure—perhaps arrogantly!—of my ability to write a good story for the game, and extremely motivated to prove myself to my industry peers. This has historically been a reason behind me overcompensating on various things, and Necrobarista brought that out in a number of ways.
I've spoken before on how I found the creative process on Necrobarista an extractive one. It was extremely important to the game's director to evoke emotion, as much as possible, to create a deeply memorable experience. Thus, it was top priority for the rest of us, and something we all had on our minds, constantly - especially me. So I would leave the house every day to work in every late-night cafe I could find, put on a playlist of sad music about loss and death, and work to untangle it all. It's abundantly clear now that I was not experienced enough or mature enough to undergo that creative process in a sustainable way, but since everyone else on the team was burning the candle at both ends (or worse), I saw no issue with how I approached it. Having worked on projects since then that were actually well-managed, I've learned to pace myself better.
An important thing to understand about Necrobarista's script is that it was essentially implemented into the game as each successive part of the script was finished. When I joined the team, they had worked through several prototypes and attempts at building a larger narrative, but had so far been unsuccessful. This, combined with the studio's dwindling (or outright lack of...?) funds, put me under a significant time crunch. So, the process of writing was a rapid one. It went a bit like this:
One problem that the playtests highlighted that was never really fixed, however, was the gameplay. I think it's fair to say that the actual game elements of Necrobarista never really worked. The game's director had a quixotic obsession with putting something videogamey between the chapters to differentiate it from a gameplay-less visual novel. That is a blinkered view of an incredibly diverse and underappreciated medium, to put it lightly, but it wasn't something I had control over or any input on, so I just had to live with the consequences.
Anyway, that was an ongoing problem. We would show the game to someone (or many someones), they would praise the story, and then they'd get stuck between chapters on the shoehorned-in gameplay. I'm working from distant memory here, but at one point you were forced to read the (extremely long and perhaps excessively verbose) side stories in their entirety to collect enough tokens to unlock the next chapter. It was fairly disastrous in terms of its effect on the pacing of the game and the player's attention span. These systems went through several iterations and I don't think they ever ended up being good. For me, anything that got in the way of the main story—the thing everyone was playing the game for!—was obviously Not Good, but it ultimately wasn't something I had influence over, even though I was ostensibly a "lead".
However, it is worth noting that this was emblematic of one of the biggest sources of rot within Necrobarista's development process: we were constantly redoing work. The director was an extreme perfectionist, and besides the script, which I was generally left alone on, everything was constantly being worked on for the sake of being worked on, past the point of absurdity. Camera shots, lighting, animations, gameplay, environment design, prop placement... none of it was safe. You can even see examples of this in shipped content - the original release version of the game has a significantly different visual style to the Final Pour version, which was completely re-lit. Anyone can see that was unnecessary labour. I don't think choosing to work on other things would have necessarily made the game better or worse, but I do think that by the time anyone was in a place to critique these processes, the burnout (inflicted by myriad internal and external sources) was so overwhelming that doing anything else would have felt apocalyptic.
It's funny to think about that. I felt like we were ready to go. It felt like we had momentum. And then that all ground to a halt when an important development partner completely failed to deliver an extremely crucial deliverable. In fact, they didn't even start working on it, despite assuring us of constant progress. And all of a sudden, with the weight of a hundred terrible load-bearing choices crashing down on the team, it felt like it all went to absolute shit.
As shown in the intro, I wrote a portmortem for my own records in August 2021. But even that document doesn't really go into the year of development that led up to the game's eventual release in July 2020. There are many complexities that limit what I can speak on publicly in regards to the game's release, but I don't think it harms anyone to say that we did not know when the game would be able to go live until a week before its release. Games journalists who had been given review copies at the start of the year, or even earlier than that, were clearly baffled and a bit annoyed by the whole situation (sorry), but however frustrated they were, our feelings were multiplied a thousandfold. Weeks and months passed with no clear progress towards release. This, combined with some world events of minor note (global pandemic), sucked ass.
A specific moment that extremely took the wind out of our sails was in late 2019, during that year's rendition of Melbourne International Games Week. We were already burnt out from the constant uncertainty around the game's release window, but were very strongly hoping to be able to release that week. Our bad feelings from burnout were somewhat offset by our three nominations (art, narrative, music) at the Australian Game Developer Awards; we were up against Untitled Goose Game, so we knew we wouldn't get Game of the Year, but we were fairly confident of picking up something.
That was until we were unceremoniously disqualified from the awards two nights before the event. Necrobarista's game director was pulled aside at an industry party and given the news by one of the organisers - the reasoning given was that we hadn't yet released, so we were no longer eligible. To rub salt in the wound, we received an email the next day via the nominees mailing list claiming that the award trophies had been "received incomplete", which to us indicated some sort of last-minute change to the list of winners.
They didn't even refund the $30 entry fee, as far as I know. 🙁
Unsurprisingly, this was disastrous for morale. Our motivation disappeared alongside our hopes for a 2019 release. Work continued, but I think it is fair to say that a large part of the reason the game released at all is that Ryan, one of our programmers, worked tirelessly to tick every box for the certification process. He did not work alone, of course, but the word I would use to describe his contribution is "outsized". Thanks, Ryan.
So the game eventually released nine months after The Awards Debacle. The only highlight of this absolutely wretched development process was the excellent critical reception we enjoyed. Shipping a game about death and grief in the middle of a global pandemic is not something I would recommend, but it resonated strongly with players and reviewers. That's something I treasure. But for all the critical acclaim, the game just didn't sell enough. Our wishlist conversion rate was terrible, and we were all locked inside, so all we could do was watch the sales numbers flatline in real time. Around this point, I was working in the regrettably common and perennially underresourced role of "community manager who also does marketing", which meant that I was made to feel like the success of the game rested solely on my shoulders. This, combined with the lockdowns, was not a particularly happy time. Shocker.
Beyond the positive reception, Necrobarista also received some respectful and appreciated criticism around its lack of Indigenous Australian representation. The lack of it is a difficult subject for me to tackle: I am of Indigenous descent myself, and my grandfather was from the Stolen Generations, so my inability to include that representation is something I personally regret. However, in reality, I struggle with connecting to and feeling valid within my culture (by explicit design of the colonial project!) and I was simply not given the resources by the studio to even begin to be able to ensure respectful representation, so I chose to avoid it. Additionally—and this is not to pass the buck, but to illuminate the process in its entirety—the game's director was not interested in representing Indigenous characters. In hindsight, I think I chose correctly, even considering the regrets I've been left with. It is incredibly important to consult deeply and respectfully with cultural stakeholders, and to have the entire creative team invested. It's essential to get it right. I don't think anything I could have done in my situation would have hit my personal standard for getting it right. Other games both before and after Necrobarista have made ill-informed attempts and gotten it disastrously wrong. That is worse, in my books.
(If I had it my way, I would prefer that people actually read Dakoda's piece and understand my personal context as a creative before thoughtlessly painting the game with the same brush as those other ones, but perhaps that's too much to ask.)
In the year or so after release, the team shipped two DLC episodes and some extra features and then released a final "director's cut" where the DLCs got essentially completely rewritten, and the main story got some edits too. It was a comfort to return to the writer role and go back and fix some⦾ things with the help of a very skilled editor/co-writer (thank you Saf), since it was absolutely not a possibility during development of the base game due to the frankly baffling way the game was architected. I'm not trying to throw shade at anyone for this one specifically, but in a nutshell the process of adding and removing shots or visual sequences from the game was extremely convoluted and often broke everything. It was not my job to do those things and I'm very glad it wasn't.
(Remember how I mentioned work kept being redone? This made it even worse.)
⦾ There ended up being a lot of text in the game that didn't meet my personal quality bar, whether for content or editing reasons. We improved and/or fixed as much as we could, but there wasn't enough time to do a pass over everything.
This, however, means that the process of rewriting anything from a single line to entire scenes or DLC episodes meant that we were doing the equivalent of rewriting an episode of TV without changing anything that happened onscreen. We had latitude to remove shots, but that was the full extent of our capabilities. It was a very complex process and I believe we worked wonders with what we had.
To return to a birds-eye view of the dev process: at various and multiple points during the above, most of us lost our minds a few times, and it was not especially flattering or elegant for anyone involved. None of this is particularly fun to recollect, because everything that happened had real human consequences. We just crashed out, in public and in private, because everything sucked and had sucked for a long time and there was no avenue to healthily process that - and most of those aren't my stories to tell.
But overall, looking back at my personal Final Pour postmortem four years later, the main thing I'm struck by is how much I was hurting. Life was not happy, for a lot of reasons, and the circumstances and dynamics at the studio were a large contributor to that. With a bit of distance, I'm more forgiving to myself. That's something I've learned: you get to choose the lessons you take away. I have very much learned, for example, to pick my battles, and to be more conscious of my own limits. Good takeaways, but I wish those lessons had come at less of a personal cost.
That's about all I can offer in terms of a satisfying ending to this. Is it immensely satisfying to hold a physical copy of a game I worked on that's playable on Nintendo Switch? Absolutely, that's bucket-list material right there. Is it kind of bullshit that I had to be gifted it by a friend⦾ instead of receiving a copy from the studio? Also a resounding yes. Was it worth working on for years on below-minimum wage? I don't have a good answer to that, and I don't know if I ever will. To assign personal narrative value to the hardship is natural - it is only human to try to make sense of it, to try to believe that it was worth it. I hope it was! I know it made a difference for some people, and that must be worth something.
⦾ Thank you, Ruqiyah, steadfast friend and developer of beloved "better than Necrobarista by objective metric of number of narrative AGDAs won" visual novel Amarantus
But to widen my scope a little: after thirteen mostly-extremely difficult years working in the games industry and ten mostly-empty months having passed since the conclusion of my last long-term gig, I'm asking myself a lot of questions around sustainability, to the point of actively exploring other career and study options for next year. I am watching senior devs get pushed out of the industry, and I am watching the ranks close around North American and European studios who were only just beginning to consider that talent exists outside of their spheres. I have always felt like I was on the margins, but now more than ever, with multiple job opportunities having appeared and then promptly evaporated on me this year, and also with the state of the games industry somehow getting immeasurably worse every single time I come back to edit this paragraph, hope is in short supply. Resources and opportunities were always scarce for someone living in South Australia, but they feel nonexistent now. So, unless things get a lot better for me by the end of this year, I'm going to have to make some very difficult choices.
It feels like the fire's gone out, and I'm just left here stirring the coals. It's unsatisfying from a narrative standpoint, but that's just the way it is.
As a postscript: in the year after release, I started initial explorations towards a semi-sequel to Necrobarista, set in the same universe, in the form of a low-fidelity (by modern standards) RPG along the lines of Persona 4 or YIIK. I thought it would be significantly more appealing to a wider audience than a visual novel (which are hard to sell!) and I made some pretty positive progress before it got killed off - the studio director wanted to attempt to get funding for something else. I don't know if that ever happened, but for me, that's the project that got away. Still think about it a lot. Ah well.
As a second postscript: here is the original version of a moment in Necrobarista's epilogue. It was cut down for budget reasons.
As a third, final postscript, to elaborate on the second: I find it valuable to share original, internal documentation when I can. I did it with the Grim Tranquility script that I was brought in to do script doctor work on, and I will do it with Necrobarista too. So, here are the scripts for the original 2020 release, all ~194 pages, with original comments. I hope someone finds them valuable or interesting. If you do, let me know! I'm happy to chat about pretty much anything.
I've covered this above to an extent, but it's worth saying twice: I wish I'd known that writing doesn't have to be a painful, extractive process. When you're young and blessed with limitless energy and cursed with a violent desire to match your peers and Achieve Great Things, it's too easy to start burning the candle at both ends. I spent 2019-2022 suffering pretty severe burnout.
In terms of things I learned: I love collaboration! I love working together to fix story bits and punch up dialogue. That friendly, safe dynamic was generally absent for the majority of Necrobarista's development, and only appeared once Saf joined me to start rewriting the DLC episodes (Devil's Den and Walking to the Sky). For example, the Walking to the Sky DLC rewrite process essentially consisted of us writing jokes in a spreadsheet at each other. Not a lot of people played those DLCs, but those who did have enjoyed them a ton.
I think I got the most satisfaction out of the Ashling intermissions and the fourth act - basically everything after the resurrection ritual fails. Writing a bunch of people dealing with a horrible situation in unique ways plays to my strengths as a writer (see: both Laen and the Axle in Eternal Strands), and it was a part of the creative journey where I felt all the seeds I'd planted were beginning to bloom.
This is a more specific version of my last answer: the sequence where Maddy and Chay sit at his gravestone, talking around the problem, delaying the inevitable? Banger, if I do say so myself. Watching people react to that specific part reminds me that I'm actually pretty decent at my craft - that final moment wouldn't have the impact it does without the benefit of a ton of very strong characterisation beforehand.
I knew from the beginning that there'd be some sort of scene along those lines, though the specifics weren't nailed down until I sat down and wrote it. I chose to keep the scope for the scene extremely constrained: two characters, one location, as few animations as possible. Everyone else had already had their chance to say goodbye to Chay in their own way, and given Maddy's avoidant personality, it fit perfectly that she would be the last one to accept his fate. Weaving together that sort of narrative payoff is always a great moment.
This is a genuinely tricky one to answer, because I got something different out of writing each of the characters - they're all special to me. I'll twist the question a little: my favourite relationships to write (by a small margin!) were Ned's relationships with Chay and Kishan. I've written on this before, but there's little to no representation in videogames of friendships between Australian men. There tends to be a certain respectful stoicism in these relationships, characterised by quiet acts of service. When Ned is sitting outside the cafe with Kishan and offers him a cigarette, that is a layered and meaningful interaction that might be invisible to someone outside of the Australian cultural context. Likewise, Ned is heartbroken about Chay's death (they might be former lovers! maybe!!), but in lieu of an emotional response, he instead starts gently bending the Council of Death's rules for Maddy in hopes that her illegal ritual might indeed bring Chay back to life. There are hidden layers of respect and care in his choices and actions, all laid with explicit intent on my part.
Absolutely. Even if times were frequently bad, I'm confident that I was one of the only people who could pull off the task of writing the game, particularly in regards to nailing the Australian cultural authenticity and specificity (which was lacking prior to my joining the team). I'm proud of that achievement, and I always will be.
It was extremely important to the team for Necrobarista to be a Melbourne Videogame, so it's ironic that someone from Adelaide ended up in charge of the narrative. Locals will understand.
I consider myself very lucky to be relatively well-travelled. I've lived in several places across both Australia and the United States, and I've been lucky enough to travel beyond that, too. That's given me a slightly wider perspective on the world and in particular a good understanding of what a place like Melbourne has in terms of cultural differences with the rest of the world and the rest of Australia. Australia itself, of course, is not a cultural monolith, and given that it is a young nation where its denizens often define our identities in a way that centres our differences to each other, it's important to keep that in mind.
Taking that into account, there was already a ton of Melbourne influence in the visual aesthetic of the studio's earlier prototypes, though that influence was mostly absent in their narrative aspects. The "tram demo" was set on a tram (wow!) and featured Ned in a design very similar to his appearance in Necrobarista. Similarly, the Project Ven prototype was set on a rooftop cafe in a place that looks a bit like Melbourne.
As I mentioned before, though, the narrative throughline of Australian culture was missing prior to my arrival. The project had not employed an Australian writer, and it showed.
Anyway, Melbourne to me is the following:
That might sound pretty snarky! But having just a tiny bit of a wider perspective and set of experiences means that I was able to work with the project's existing aesthetic touchpoints (coffee, trams, Ned Kelly, alleyways, train stations, repurposed industrial buildings) to build a story that felt authentic. Ned, for example, doesn't work as a character without the internal contradictions he faces of being a famous criminal and working-class hero but having been pressed into the service of the Council of Death, becoming a part of what he understands to be an oppressive system. And the cafe environment itself doesn't work without extensive experience of both Australian cafe culture and Australian people culture. You can't just throw together aesthetic influences and assume it'll come together - you need to have enough lived experience to breathe life into every aspect of the work.
(Fun fact: the first time Starbucks tried to expand to Australia, it failed miserably.)
That said: with the benefit of hindsight, I wish we had been able to do better to present a more specific Melbourne space. It's reasonable to say that perhaps the anime influences shone through a little too brightly in the environment design - I would have liked the train platform in Walking to the Sky to have more specific environmental hallmarks, for example. But, in truth, I don't think the team could have done any better under the specific constraints that dogged this project. It's so easy to compare Necrobarista to its contemporaries, but we were working under an incredibly small budget. Perhaps more experienced and competent studio leadership would have made better choices around sources of funding and choices of publishers, but that's all theoretical at this point.
What is heartening to see, though, is other narrative-focused games that came after Necrobarista that have aimed for similar kinds of locational and cultural specificity. Necrobarista wasn't even close to being the first game to do this, so I'm not going to be arrogant and assume that we inspired that, but it's good for it to have been part of that conversation, and I hope we get to see more in the future.
I'm happy to expand this section with further answers - feel free to contact me with questions and I'll do my best!